class AIAssistant:
    """AI助手父类，定义所有助手的基础属性和通用方法"""
    def __init__(self, aid, name, type_, version, is_online, ability_score):
        # 基础属性：编号、名称、类型、版本号、是否在线、能力评分
        self.aid = aid  # 助手ID（唯一标识）
        self.name = name  # 助手名称
        self.type_ = type_  # 助手类型（如数据分析助手、文本生成助手）
        self.version = version  # 版本号
        self.is_online = is_online  # 是否在线（布尔值）
        self.ability_score = ability_score  # 能力评分（0-100）

    def start_service(self):
        """启动AI助手服务"""
        if self.is_online:
            return False, f"助手【{self.name}】已在运行。"
        self.is_online = True
        return True, f"✅ 助手【{self.name}】启动成功，当前状态：在线。"

    def stop_service(self):
        """停止AI助手服务"""
        if not self.is_online:
            return False, f"助手【{self.name}】已处于停止状态。"
        self.is_online = False
        return True, f"✅ 助手【{self.name}】已停止，当前状态：离线。"

    def assign_task(self, task_content):
        """为AI助手分配任务（仅在线时可执行）"""
        if not self.is_online:
            return False, f"❌ {self.name} 当前离线，无法执行任务。"
        return True, f"✅ 已为【{self.name}】分配任务：{task_content}\n任务执行中..."

    def update_info(self, attr, value):
        """修改助手属性（支持name/type/version/online/score）"""
        attr = attr.lower()  # 统一小写，避免大小写问题
        if attr == "name":
            self.name = value
        elif attr == "type":
            self.type_ = value
        elif attr == "version":
            self.version = value
        elif attr == "online":
            self.is_online = bool(int(value))  # 1转为True，0转为False
        elif attr == "score":
            score = int(value)
            if 0 <= score <= 100:
                self.ability_score = score
            else:
                return False, "❌ 能力评分需在0-100之间，请重新输入！"
        else:
            return False, f"❌ 不支持修改该属性（{attr}），可修改属性：name,type,version,online,score"
        return True, f"✅ 助手【{self.aid}】修改成功！"

    def to_string(self):
        """返回助手信息的字符串格式（用于列表展示）"""
        status = "在线" if self.is_online else "离线"
        status_icon = "🟢" if self.is_online else "🔴"  # 状态图标（在线绿色，离线红色）
        return f"ID: {self.aid}, 名称: {self.name}, 类型: {self.type_}, 版本: {self.version}, 状态: {status_icon}{status}, 能力评分: {self.ability_score} [{self.type_}]"


# 定义5个AI助手子类（继承父类，可自定义子类专属属性）
class DataAnalysisAssistant(AIAssistant):
    """数据分析助手子类（示例：新增数据处理引擎属性）"""
    def __init__(self, aid, name, version, is_online, ability_score, data_engine):
        super().__init__(aid, name, "数据分析助手", version, is_online, ability_score)
        self.data_engine = data_engine  # 子类专属属性：数据处理引擎（如Spark、Pandas）

    def to_string(self):
        """重写父类方法，增加子类属性展示"""
        base_info = super().to_string()
        return f"{base_info} | 数据引擎: {self.data_engine}"


class ImageGenerationAssistant(AIAssistant):
    """图片生成助手子类（示例：新增模型精度属性）"""
    def __init__(self, aid, name, version, is_online, ability_score, model_precision):
        super().__init__(aid, name, "图片生成助手", version, is_online, ability_score)
        self.model_precision = model_precision  # 子类专属属性：模型精度（如1024x1024、2048x2048）

    def to_string(self):
        base_info = super().to_string()
        return f"{base_info} | 模型精度: {self.model_precision}"


class TextGenerationAssistant(AIAssistant):
    """文本生成助手子类（示例：新增支持语言属性）"""
    def __init__(self, aid, name, version, is_online, ability_score, support_languages):
        super().__init__(aid, name, "文本生成助手", version, is_online, ability_score)
        self.support_languages = support_languages  # 子类专属属性：支持语言（如中文、英文）

    def to_string(self):
        base_info = super().to_string()
        return f"{base_info} | 支持语言: {','.join(self.support_languages)}"


class TranslationAssistant(AIAssistant):
    """翻译助手子类（示例：新增翻译方向属性）"""
    def __init__(self, aid, name, version, is_online, ability_score, translation_directions):
        super().__init__(aid, name, "翻译助手", version, is_online, ability_score)
        self.translation_directions = translation_directions  # 子类专属属性：翻译方向（如中译英、英译日）

    def to_string(self):
        base_info = super().to_string()
        return f"{base_info} | 翻译方向: {','.join(self.translation_directions)}"


class VoiceAssistant(AIAssistant):
    """语音助手子类（示例：新增语音识别率属性）"""
    def __init__(self, aid, name, version, is_online, ability_score, recognition_rate):
        super().__init__(aid, name, "语音助手", version, is_online, ability_score)
        self.recognition_rate = recognition_rate  # 子类专属属性：语音识别率（如98.5%）

    def to_string(self):
        base_info = super().to_string()
        return f"{base_info} | 语音识别率: {self.recognition_rate}"


class AIManager:
    """AI助手管理器类，负责助手的添加、查询、修改、删除等核心管理功能"""
    def __init__(self, max_size=10):
        self.assistants = []  # 存储AI助手的列表（模拟固定大小数组，通过max_size限制）
        self.max_size = max_size  # 最大存储容量（文档要求：固定大小数组）

    def add_assistant(self, assistant):
        """添加新的AI助手"""
        # 校验1：是否达到存储上限
        if len(self.assistants) >= self.max_size:
            return False, f"❌ 系统存储已达上限（{self.max_size}个），无法添加新助手！"
        # 校验2：ID是否已存在（ID唯一）
        for exist_assist in self.assistants:
            if exist_assist.aid == assistant.aid:
                return False, f"❌ ID为【{assistant.aid}】的助手已存在，请更换ID！"
        # 添加助手
        self.assistants.append(assistant)
        return True, f"✅ 助手【{assistant.name}】添加成功！"

    def get_assistant_by_id(self, aid):
        """根据ID查询助手（返回助手对象或None）"""
        for assistant in self.assistants:
            if assistant.aid == aid:
                return assistant
        return None

    def get_all_assistants(self):
        """获取所有AI助手列表"""
        return self.assistants

    def update_assistant(self, aid, attr, value):
        """根据ID修改助手属性"""
        assistant = self.get_assistant_by_id(aid)
        if not assistant:
            return False, f"❌ 未找到ID为【{aid}】的助手！"
        # 调用助手对象的修改方法
        return assistant.update_info(attr, value)

    def delete_assistant(self, aid):
        """根据ID删除助手"""
        assistant = self.get_assistant_by_id(aid)
        if not assistant:
            return False, f"❌ 未找到ID为【{aid}】的助手！"
        # 从列表中移除助手
        self.assistants.remove(assistant)
        return True, f"✅ 助手【{assistant.name}】已删除。"

    def start_assistant(self, aid):
        """根据ID启动助手服务"""
        assistant = self.get_assistant_by_id(aid)
        if not assistant:
            return False, f"❌ 未找到ID为【{aid}】的助手！"
        return assistant.start_service()

    def stop_assistant(self, aid):
        """根据ID停止助手服务"""
        assistant = self.get_assistant_by_id(aid)
        if not assistant:
            return False, f"❌ 未找到ID为【{aid}】的助手！"
        return assistant.stop_service()

    def assign_task_to_assistant(self, aid, task_content):
        """根据ID为助手分配任务"""
        assistant = self.get_assistant_by_id(aid)
        if not assistant:
            return False, f"❌ 未找到ID为【{aid}】的助手！"
        return assistant.assign_task(task_content)

    def get_system_statistics(self):
        """获取系统统计信息（总数量、在线数、离线数、平均评分）"""
        total = len(self.assistants)
        if total == 0:
            return {
                "total": 0,
                "online": 0,
                "offline": 0,
                "avg_score": 0.0
            }
        # 计算在线数和总评分
        online_count = 0
        total_score = 0
        for assistant in self.assistants:
            if assistant.is_online:
                online_count += 1
            total_score += assistant.ability_score
        # 计算平均评分（保留2位小数）
        avg_score = round(total_score / total, 2)
        return {
            "total": total,
            "online": online_count,
            "offline": total - online_count,
            "avg_score": avg_score
        }


def print_menu():
    """打印系统菜单"""
    print("\n========== AI助手管理器 ==========")
    print("1. 查看所有AI助手列表")
    print("2. 根据ID查询助手详情")
    print("3. 添加新的AI助手")
    print("4. 根据ID修改助手信息")
    print("5. 删除AI助手（按ID）")
    print("6. 启动AI助手服务")
    print("7. 停止AI助手服务")
    print("8. 为AI助手分配任务")
    print("9. 显示系统统计信息")
    print("0. 退出系统")
    print("===================================")


def main():
    """主函数：启动AI助手管理器系统"""
    # 初始化管理器（最大支持10个助手）
    ai_manager = AIManager(max_size=10)
    # 初始化默认助手数据（文档中示例数据）
    init_default_assistants(ai_manager)

    print("欢迎使用 AI助手管理器 v1.0")
    while True:
        print_menu()
        try:
            choice = input("请选择操作: ")
            # 根据用户选择执行对应功能
            if choice == "0":
                print(" 感谢使用，再见！")
                break
            elif choice == "1":
                # 1. 查看所有助手列表
                show_all_assistants(ai_manager)
            elif choice == "2":
                # 2. 根据ID查询助手详情
                query_assistant_by_id(ai_manager)
            elif choice == "3":
                # 3. 添加新助手
                add_new_assistant(ai_manager)
            elif choice == "4":
                # 4. 修改助手信息
                update_assistant_info(ai_manager)
            elif choice == "5":
                # 5. 删除助手
                delete_assistant_by_id(ai_manager)
            elif choice == "6":
                # 6. 启动助手服务
                start_assistant_service(ai_manager)
            elif choice == "7":
                # 7. 停止助手服务
                stop_assistant_service(ai_manager)
            elif choice == "8":
                # 8. 分配任务
                assign_task_to_assistant(ai_manager)
            elif choice == "9":
                # 9. 显示统计信息
                show_system_statistics(ai_manager)
            else:
                print("❌ 无效操作，请输入0-9之间的数字！")
        except Exception as e:
            print(f"❌ 操作出错：{str(e)}，请重新尝试！")


def init_default_assistants(ai_manager):
    """初始化默认助手数据（文档中的示例数据）"""
    # 添加5个默认助手（覆盖文档中101-105的示例）
    default_assistants = [
        # 语音助手（101：小智）
        VoiceAssistant(
            aid=101,
            name="小智",
            version="v1.2",
            is_online=True,
            ability_score=85,
            recognition_rate="96.2%"
        ),
        # 文本生成助手（102：文小助）
        TextGenerationAssistant(
            aid=102,
            name="文小助",
            version="v2.0",
            is_online=True,
            ability_score=92,
            support_languages=["中文", "英文"]
        ),
        # 图片生成助手（103：图灵）
        ImageGenerationAssistant(
            aid=103,
            name="图灵",
            version="v1.5",
            is_online=False,
            ability_score=88,
            model_precision="1024x1024"
        ),
        # 数据分析助手（104：数小析）
        DataAnalysisAssistant(
            aid=104,
            name="数小析",
            version="v1.0",
            is_online=True,
            ability_score=79,
            data_engine="Spark"
        ),
        # 翻译助手（105：翻译精灵）
        TranslationAssistant(
            aid=105,
            name="翻译精灵",
            version="v2.1",
            is_online=False,
            ability_score=95,
            translation_directions=["中译英", "英译中"]
        )
    ]
    # 批量添加到管理器
    for assist in default_assistants:
        ai_manager.add_assistant(assist)


def show_all_assistants(ai_manager):
    """展示所有AI助手列表"""
    assistants = ai_manager.get_all_assistants()
    if not assistants:
        print(" 当前系统中暂无AI助手！")
        return
    print("\n所有AI助手列表：")
    for idx, assist in enumerate(assistants, 1):
        print(f"{idx}. {assist.to_string()}")


def query_assistant_by_id(ai_manager):
    """根据ID查询助手详情"""
    aid = input("请输入要查询的AI助手ID: ")
    try:
        aid = int(aid)  # 转换为整数ID
    except ValueError:
        print("❌ ID必须为数字，请重新输入！")
        return
    assistant = ai_manager.get_assistant_by_id(aid)
    if not assistant:
        print(f"❌ 未找到ID为【{aid}】的助手！")
        return
    print(f"\n✅ 查询结果: {assistant.to_string()}")


def add_new_assistant(ai_manager):
    """添加新的AI助手（支持5个子类类型）"""
    print("\n添加新AI助手")
    # 1. 输入基础属性
    try:
        aid = int(input("请输入ID: "))
        name = input("请输入名称: ").strip()
        if not name:
            raise ValueError("名称不能为空！")
        version = input("请输入版本号: ").strip()
        if not version:
            raise ValueError("版本号不能为空！")
        # 选择助手类型
        print("\n请选择助手类型（输入对应数字）：")
        print("1. 数据分析助手  2. 图片生成助手  3. 文本生成助手  4. 翻译助手  5. 语音助手")
        type_choice = input("请选择类型: ")
        if type_choice not in ["1", "2", "3", "4", "5"]:
            raise ValueError("无效的类型选择，必须输入1-5！")
        # 输入是否在线
        online_input = input("是否在线？(1-是, 0-否): ")
        if online_input not in ["0", "1"]:
            raise ValueError("是否在线必须输入0或1！")
        is_online = bool(int(online_input))
        # 输入能力评分
        score = int(input("请输入能力评分(0-100): "))
        if not (0 <= score <= 100):
            raise ValueError("能力评分必须在0-100之间！")
    except ValueError as e:
        print(f"❌ 输入错误：{str(e)}")
        return

    # 2. 根据类型输入子类专属属性
    assistant = None
    if type_choice == "1":
        # 数据分析助手：输入数据引擎
        data_engine = input("请输入数据处理引擎（如Spark、Pandas）: ").strip()
        if not data_engine:
            print("❌ 数据引擎不能为空！")
            return
        assistant = DataAnalysisAssistant(aid, name, version, is_online, score, data_engine)
    elif type_choice == "2":
        # 图片生成助手：输入模型精度
        model_precision = input("请输入模型精度（如1024x1024）: ").strip()
        if not model_precision:
            print("❌ 模型精度不能为空！")
            return
        assistant = ImageGenerationAssistant(aid, name, version, is_online, score, model_precision)
    elif type_choice == "3":
        # 文本生成助手：输入支持语言（用逗号分隔）
        lang_input = input("请输入支持语言（用逗号分隔，如中文,英文）: ").strip()
        if not lang_input:
            print("❌ 支持语言不能为空！")
            return
        support_langs = [lang.strip() for lang in lang_input.split(",")]
        assistant = TextGenerationAssistant(aid, name, version, is_online, score, support_langs)
    elif type_choice == "4":
        # 翻译助手：输入翻译方向（用逗号分隔）
        dir_input = input("请输入翻译方向（用逗号分隔，如中译英,英译中）: ").strip()
        if not dir_input:
            print("❌ 翻译方向不能为空！")
            return
        translation_dirs = [dir.strip() for dir in dir_input.split(",")]
        assistant = TranslationAssistant(aid, name, version, is_online, score, translation_dirs)
    elif type_choice == "5":
        # 语音助手：输入语音识别率
        rate = input("请输入语音识别率（如98.5%）: ").strip()
        if not rate:
            print("❌ 语音识别率不能为空！")
            return
        assistant = VoiceAssistant(aid, name, version, is_online, score, rate)

    # 3. 调用管理器添加助手
    success, msg = ai_manager.add_assistant(assistant)
    print(msg)


def update_assistant_info(ai_manager):
    """根据ID修改助手信息"""
    print("\n修改AI助手数据")
    try:
        aid = int(input("请输入ID: "))
        # 提示可修改属性
        print("可修改属性列表为：name,type,version,online,score")
        attr_value = input("请输入要修改的属性和值，用空格分割: ").strip()
        if len(attr_value.split()) != 2:
            raise ValueError("输入格式错误！正确格式：属性名 值（如 score 100）")
        attr, value = attr_value.split()
    except ValueError as e:
        print(f"❌ 输入错误：{str(e)}")
        return

    # 调用管理器修改
    success, msg = ai_manager.update_assistant(aid, attr, value)
    print(msg)


def delete_assistant_by_id(ai_manager):
    """根据ID删除助手"""
    try:
        aid = int(input("请输入要删除的AI助手ID: "))
    except ValueError:
        print("❌ ID必须为数字，请重新输入！")
        return

    success, msg = ai_manager.delete_assistant(aid)
    print(msg)


def start_assistant_service(ai_manager):
    """启动AI助手服务"""
    try:
        aid = int(input("请输入要启动的AI助手ID: "))
    except ValueError:
        print("❌ ID必须为数字，请重新输入！")
        return

    success, msg = ai_manager.start_assistant(aid)
    print(msg)


def stop_assistant_service(ai_manager):
    """停止AI助手服务"""
    try:
        aid = int(input("请输入要停止的AI助手ID: "))
    except ValueError:
        print("❌ ID必须为数字，请重新输入！")
        return

    success, msg = ai_manager.stop_assistant(aid)
    print(msg)


def assign_task_to_assistant(ai_manager):
    """为AI助手分配任务"""
    try:
        aid = int(input("请输入目标AI助手ID: "))
        task = input("请输入任务内容: ").strip()
        if not task:
            raise ValueError("任务内容不能为空！")
    except ValueError as e:
        print(f"❌ 输入错误：{str(e)}")
        return

    success, msg = ai_manager.assign_task_to_assistant(aid, task)
    print(msg)


def show_system_statistics(ai_manager):
    """显示系统统计信息"""
    stats = ai_manager.get_system_statistics()
    print("\n系统统计信息：")
    print(f"总助手数: {stats['total']}")
    print(f"在线助手数: {stats['online']}")
    print(f"离线助手数: {stats['offline']}")
    print(f"平均能力评分: {stats['avg_score']:.2f}")


# 启动系统
if __name__ == "__main__":
    main()